<?php
/**
 * ソート用ヘルパ
 *
 * @author tanaka
 * @package View_Helper_Url
 * @subpackage Sort
 */
class View_Helper_Url_Sort
{
	/**
	 * @var int
	 */
	const ORDER_DESC = 0;

	/**
	 * @var int
	 */
	const ORDER_ASC = 1;

	/**
	 * オーダーのデフォルトキー
	 * @var string
	 */
	protected static $_defaultOrderKey = 'order';

	/**
	 * オーダーのデフォルトキー名をセットします。
	 *
	 * @param string $orderKey
	 * @return
	 */
	public static function setDefaultOrderKey($orderKey = 'order')
	{
		self::$_defaultOrderKey = $orderKey;
	}

	/**
	 * オーダーのデフォルトキー名を取得します。
	 *
	 * @return string
	 */
	public static function getDefaultOrderKey()
	{
		return self::$_defaultOrderKey;
	}

	/**
	 * スペックのデフォルトキー
	 * @var string
	 */
	protected static $_defaultSpecKey = 'spec';

	/**
	 * スペックのデフォルトキー名をセットします。
	 *
	 * @param string $specKey
	 * @return
	 */
	public static function setDefaultSpecKey($specKey = 'spec')
	{
		self::$_defaultSpecKey = $specKey;
	}

	/**
	 * スペックのデフォルトキー名を取得します。
	 *
	 * @return string
	 */
	public static function getDefaultSpecKey()
	{
		return self::$_defaultSpecKey;
	}

	/**
	 * 並び変えキー
	 * @var string
	 */
	protected $_orderKey;

	/**
	 * 表示順キー
	 * @var string
	 */
	protected $_specKey;

	/**
	 * コンストラクタ
	 *
	 * @param string optional $indexKey
	 * @param string optional $specKey
	 * @return
	 */
	public function __construct($orderKey = null, $specKey = null)
	{
		$this->_orderKey = $orderKey;
		$this->_specKey = $specKey;
	}

	/**
	 * ページナンバーのパラメータ名を取得します。
	 *
	 * @return string
	 */
	public function getOrderKey()
	{
		return !is_null($this->_orderKey) ? $this->_orderKey : self::$_defaultOrderKey;
	}

	/**
	 * ページナンバーのパラメータ名を取得します。
	 *
	 * @return string
	 */
	public function getSpecKey()
	{
		return isset($this->_spec) ? $this->_spec : self::$_defaultSpecKey;
	}

	/**
	 * URLを生成します。
	 *
	 * @param string $label 表示ラベル
	 * @param string $param 指定キーのパラメータ
	 * @return string
	 */
	public function getUrl($label, $param)
	{
		if(!strlen($param))return $label;
		
		$url = clone View_Helper_Url_Base::getInstance();

		if ($url->getParam($this->getOrderKey()) == $param) {
			// 現在対象ラベルでソート済みの場合

			if ($url->getParam($this->getSpecKey()) == self::ORDER_DESC) {
				$url->setParam($this->getSpecKey(), self::ORDER_ASC);
				return '<a href="' . $url . '" class="selected">' . $label . '▼' . '</a>' ;
			}
			else {
				$url->setParam($this->getSpecKey(), self::ORDER_DESC);
				return '<a href="' . $url . '" class="selected">' . $label  . '▲' . '</a>';
			}
		}
		else {
			// 別のラベルでソート済み
			$url->setParam($this->getOrderKey(), $param);
			return '<a href="' . $url . '">' . $label . '</a>';
		}
	}
}
